package com.sirc.zp.sqlprovider;

import com.sirc.zp.domain.ZP;
import com.sirc.zp.web.domain.Page;
import org.apache.ibatis.jdbc.SQL;

import java.util.Map;

/**
 * Created by lenovo on 2018/3/8.
 */
public class ZPProvider {
    /**
     * 通过id+table获得族谱成员
     * @param map 例如 ｛table：dxzp，id：2｝
     * @return
     */
    public String getPersonById(final Map map){
        String table=map.get("table").toString();
        Integer id=(Integer)map.get("id");
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("id="+id);
        }}.toString();
    }
    /**
     * 通过谱名+table获得族谱成员
     * @param map 例如 ｛table：dxzp，name：表二公｝
     * @return
     */
    public String getPersonsByName(Map map)
    {
        String table=map.get("table").toString();
        String name=map.get("name").toString();
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("name like '%"+name+"%'");
        }}.toString();

    }
    /**
     * 通过谱名+table获得族谱成员
     * @param map 例如 ｛table：dxzp，idname：11｝
     * @return
     */
    public String  getPersonsByIDName(Map map){
        String table=map.get("table").toString();
        String idName=map.get("idName").toString();
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("idname like '%"+idName+"%'");
        }}.toString();
    }
    /**
     * 通过乳名+table获得族谱成员
     * @param map 例如 ｛table：dxzp，idname：222｝
     * @return
     */
    public String getPersonsByRName(Map map){
        String table=map.get("table").toString();
        String rName=map.get("rName").toString();
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("rname like '%"+rName+"%'");
        }}.toString();
    }

    /**
     * 获得家族一共有多少代
     * @param table 表的名称
     * @return
     */
    public String getDaList(String table){
        return new SQL(){{
            SELECT("DISTINCT gene");
            FROM(table);
            ORDER_BY("gene");
        }}.toString();
    }
    /**
     * 获得家族每一代的人数
     * @param map 例如 ｛table：dxzp，gene：2｝ 获得dxzp的第二代人数
     * @return
     */
    public String getDaiCountFromGene(Map map){
        String table=map.get("table").toString();
        Integer gene=(Integer)map.get("gene");
        return new SQL(){{
            SELECT("count(*)");
            FROM(table);
            WHERE("gene="+gene);
        }}.toString();
    }
    /**
     * 获得每个人的孩子
     * @param map 例如 ｛table：dxzp，pid：2｝ 获得dxzp的pid为2的孩子
     * @return
     */
    public String getChildsFromPid(Map map)
    {
        String table=map.get("table").toString();
        Integer pid=(Integer)map.get("pid");
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("pid="+pid);
        }}.toString();

    }
    /**
     * 获得亲兄弟节点
     * @param map 例如 ｛table：dxzp，pid：1，id：2｝ 获得dxzp的id为2的亲兄弟
     * @return
     */
    public String getXD(Map map){
        String table=map.get("table").toString();
        Integer pid=(Integer)map.get("pid");
        Integer id=(Integer)map.get("id");
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("pid="+pid);
            WHERE("id!="+id);
        }}.toString();
    }
    /**
     * 获得每个人的父亲节点
     * @param map 例如 ｛table：dxzp，pid：1｝ 获得dxzp的id为2的亲兄弟
     * @return
     */
    public String getParent(Map map){
        String table=map.get("table").toString();
        Integer pid=(Integer)map.get("pid");
        return new SQL(){{
            SELECT("*");
            FROM(table);
            WHERE("id="+pid);
        }}.toString();
    }
    /**
     * 族谱数据一共有多少行
     * @return
     */
    public String getTotalCount(String table){
        return new SQL(){{
            SELECT("count(*)");
            FROM(table);
        }}.toString();
    }
    /**
     * 分页查询(待定，还未实现)
     * @param map 例如 ｛table：dxzp，page：Page<ZP>对象｝ 获得dxzp的id为2的亲兄弟
     * @return
     */
//    @Select("SELECT * FROM public.zp order by id,gene,rank limit #{limit} offset #{offset}")
    public String getDataFromPage(Map map){
        String table=map.get("table").toString();
        Page<ZP> page=(Page<ZP>) map.get("page");
        return new SQL(){{
            SELECT("count(*)");
            FROM(table);
        }}.toString();
    }
    /**
     * 创建表
     * @param tableName 表名
     * @return
     */
    public String createZPTable(final String tableName){
        String sql="CREATE TABLE `"+tableName+"` (  \n" +
                "  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  \n" +
                "  `name` varchar(255) DEFAULT NULL,  \n" +
                "  `idname` varchar(255) DEFAULT NULL,  \n" +
                "  `rname` varchar(255) DEFAULT NULL,  \n" +
                "  `pid` int(10),  \n" +
                "  `rank` int(10),  \n" +
                "  `gene` int(10),  \n" +
                "  `csrq` varchar(255) DEFAULT NULL,  \n" +
                "  `swrq` varchar(255) DEFAULT NULL,  \n" +
                "  `wife` varchar(255) DEFAULT NULL,  \n" +
                "  `wcsrq` varchar(255) DEFAULT NULL,  \n" +
                "  `wswrq` varchar(255) DEFAULT NULL,  \n" +
                "  `wintr` varchar(255) DEFAULT NULL,  \n" +
                "  `addr` varchar(255) DEFAULT NULL,  \n" +
                "  `lxfs` varchar(255) DEFAULT NULL,  \n" +
                "  `intr` varchar(255) DEFAULT NULL,  \n" +
                "  `zi` varchar(255) DEFAULT NULL,  \n" +
                "  `dadd` varchar(255) DEFAULT NULL,  \n" +
                "  `gi` varchar(255) DEFAULT NULL,  \n" +
                "  `dwife` varchar(255) DEFAULT NULL,  \n" +
                "  `edu` varchar(255) DEFAULT NULL,  \n" +
                "  `title` varchar(255) DEFAULT NULL,  \n" +
                "  `school` varchar(255) DEFAULT NULL,  \n" +
                "  `hao` varchar(255) DEFAULT NULL,  \n" +
                "  `tname` varchar(255) DEFAULT NULL,  \n" +
                "  `haschild` varchar(255) DEFAULT NULL,  \n" +
                "  `isdelete` varchar(255) DEFAULT NULL,  \n" +
                "  PRIMARY KEY (`id`) "+
                ") ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;";
        return sql;

    }
    /**
     * 添加族谱信息
     * @param map 例如｛table：dxzp，zp：zp｝
     * @return
     */
    public String addZP(Map map)
    {
        String table=map.get("table").toString();
        ZP zp=(ZP) map.get("zp");
        return new SQL(){{
            INSERT_INTO(table);
            if(zp.getName()!=null)
            {
                VALUES("name", "#{zp.name}");
            }
            if(zp.getIdname()!=null)
            {
                VALUES("idname", "#{zp.idname}");
            }
            if(zp.getRname()!=null)
            {
                VALUES("rname", "#{zp.rname}");
            }
            if(zp.getPid()!=null)
            {
                VALUES("pid", "#{zp.pid}");
            }
            if(zp.getRank()!=null)
            {
                VALUES("rank", "#{zp.rank}");
            }
            if(zp.getGene()!=null)
            {
                VALUES("gene", "#{zp.gene}");
            }
            if(zp.getCsrq()!=null)
            {
                VALUES("csrq", "#{zp.csrq}");
            }
            if(zp.getSwrq()!=null)
            {
                VALUES("swrq", "#{zp.swrq}");
            }
            if(zp.getWife()!=null)
            {
                VALUES("wife", "#{zp.wife}");
            }
            if(zp.getWcsrq()!=null)
            {
                VALUES("wcsrq", "#{zp.wcsrq}");
            }
            if(zp.getWswrq()!=null)
            {
                VALUES("wswrq", "#{zp.wswrq}");
            }
            if(zp.getWintr()!=null)
            {
                VALUES("wintr", "#{zp.wintr}");
            }
            if(zp.getAddr()!=null)
            {
                VALUES("addr", "#{zp.addr}");
            }
            if(zp.getLxfs()!=null)
            {
                VALUES("lxfs", "#{zp.lxfs}");
            }
            if(zp.getIntr()!=null)
            {
                VALUES("intr", "#{zp.intr}");
            }
            if(zp.getZi()!=null)
            {
                VALUES("zi", "#{zp.zi}");
            }
            if(zp.getDadd()!=null)
            {
                VALUES("dadd", "#{zp.dadd}");
            }
            if(zp.getGi()!=null)
            {
                VALUES("gi", "#{zp.gi}");
            }
            if(zp.getDwife()!=null)
            {
                VALUES("dwife", "#{zp.dwife}");
            }
            if(zp.getEdu()!=null)
            {
                VALUES("edu", "#{zp.edu}");
            }
            if(zp.getTitle()!=null)
            {
                VALUES("title", "#{zp.title}");
            }
            if(zp.getSchool()!=null)
            {
                VALUES("school", "#{zp.school}");
            }
            if(zp.getHao()!=null)
            {
                VALUES("hao", "#{zp.hao}");
            }
            if(zp.getTname()!=null)
            {
                VALUES("tname", "#{zp.tname}");
            }
            if(zp.getHaschild()!=null)
            {
                VALUES("haschild", "#{zp.haschild}");
            }
            if(zp.getIsdelete()!=null)
            {
                VALUES("isdelete", "#{zp.isdelete}");
            }
        }}.toString();

    }
    /**
     * 更新族谱成员信息
     * @param map 例如｛table：dxzp，zp：zp｝
     * @return
     */
    public String updateZP(Map map)
    {
        String table=map.get("table").toString();
        ZP zp=(ZP) map.get("zp");
        return new SQL(){{
            UPDATE(table);
            if(zp.getName()!=null)
            {
                SET("name=#{zp.name}");
            }
            if(zp.getIdname()!=null)
            {
                SET("idname=#{zp.idname}");
            }
            if(zp.getRname()!=null)
            {
                SET("rname=#{zp.rname}");
            }
            if(zp.getPid()!=null)
            {
                SET("pid=#{zp.pid}");
            }
            if(zp.getRank()!=null)
            {
                SET("rank=#{zp.rank}");
            }
            if(zp.getGene()!=null)
            {
                SET("gene=#{zp.gene}");
            }
            if(zp.getCsrq()!=null)
            {
                SET("csrq=#{zp.csrq}");
            }
            if(zp.getSwrq()!=null)
            {
                SET("swrq=#{zp.swrq}");
            }
            if(zp.getWife()!=null)
            {
                SET("wife=#{zp.wife}");
            }
            if(zp.getWcsrq()!=null)
            {
                SET("wcsrq=#{zp.wcsrq}");
            }
            if(zp.getWswrq()!=null)
            {
                SET("wswrq=#{zp.wswrq}");
            }
            if(zp.getWintr()!=null)
            {
                SET("wintr=#{zp.wintr}");
            }
            if(zp.getAddr()!=null)
            {
                SET("addr=#{zp.addr}");
            }
            if(zp.getLxfs()!=null)
            {
                SET("lxfs=#{zp.lxfs}");
            }
            if(zp.getIntr()!=null)
            {
                SET("intr=#{zp.intr}");
            }
            if(zp.getZi()!=null)
            {
                SET("zi=#{zp.zi}");
            }
            if(zp.getDadd()!=null)
            {
                SET("dadd=#{zp.dadd}");
            }
            if(zp.getGi()!=null)
            {
                SET("gi=#{zp.gi}");
            }
            if(zp.getDwife()!=null)
            {
                SET("dwife=#{zp.dwife}");
            }
            if(zp.getEdu()!=null)
            {
                SET("edu=#{zp.edu}");
            }
            if(zp.getTitle()!=null)
            {
                SET("title=#{zp.title}");
            }
            if(zp.getSchool()!=null)
            {
                SET("school=#{zp.school}");
            }
            if(zp.getHao()!=null)
            {
                SET("hao=#{zp.hao}");
            }
            if(zp.getTname()!=null)
            {
                SET("tname=#{zp.tname}");
            }
            if(zp.getHaschild()!=null)
            {
                SET("haschild=#{zp.haschild}");
            }
            if(zp.getIsdelete()!=null)
            {
                SET("isdelete=#{zp.isdelete}");
            }
            WHERE("id = #{zp.id}");
        }}.toString();

    }
    /**
     * 删除族谱成员信息
     * @param map 例如｛table：dxzp，id：2｝
     * @return
     */
    public String deleteZP(Map map){
        String table=map.get("table").toString();
        Integer id=(Integer) map.get("id");
        return new SQL()
        {{
            DELETE_FROM(table);
            WHERE("id="+id);
        }}.toString();
    }
}
